using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.SGI.ERP.Entidades;

namespace MakeIT.SGI.ERP.Negocios
{
	public partial class SgiDAOT : DAOT
	{

        public PerfiladmxpessoaVO getPerfiladmxpessoa(int? idPerfilAdmXPessoa)
        {
            return getPerfiladmxpessoa(idPerfilAdmXPessoa, null);
        }

        public PerfiladmxpessoaVO getPerfiladmxpessoa(int? idPerfilAdmXPessoa, int? idPessoa)
        {
            return getPerfiladmxpessoa(idPerfilAdmXPessoa, idPessoa, null);
        }

		public PerfiladmxpessoaVO getPerfiladmxpessoa(int? idPerfilAdmXPessoa, int? idPessoa, int? idPerfilAdm)
		{
			PerfiladmxpessoaVO perfiladmxpessoaVO = null;
			List<PerfiladmxpessoaVO> listPerfiladmxpessoaVOs = getPerfiladmxpessoas(idPerfilAdmXPessoa, idPessoa, idPerfilAdm);
			if (listPerfiladmxpessoaVOs != null && listPerfiladmxpessoaVOs.Count > 0)
			{
				perfiladmxpessoaVO = listPerfiladmxpessoaVOs[0];
			}
			return perfiladmxpessoaVO;
		}

		public List<PerfiladmxpessoaVO> getPerfiladmxpessoas()
		{
			return getPerfiladmxpessoas(null, null, null);
		}

		public List<PerfiladmxpessoaVO> getPerfiladmxpessoas(int? idPerfilAdmXPessoa)
		{
			return getPerfiladmxpessoas(idPerfilAdmXPessoa, null, null);
		}

		public List<PerfiladmxpessoaVO> getPerfiladmxpessoas(int? idPerfilAdmXPessoa, int? idPessoa, int? idPerfilAdm)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT pfp.idPerfilAdmXPessoa as pfp_idPerfilAdmXPessoa, pfp.idPessoa as pfp_idPessoa, pes.pessoa as pes_pessoa, pfp.idPerfilAdm as pfp_idPerfilAdm, pfa.perfilAdm as pfa_perfilAdm, pfp.cadastro as pfp_cadastro, pfp.cadastradoPor as pfp_cadastradoPor, pfp.edicao as pfp_edicao, pfp.editadoPor as pfp_editadoPor  ");
			query.AppendLine("FROM perfiladmxpessoa as pfp LEFT OUTER JOIN pessoa as pes on pfp.idPessoa=pes.idPessoa  LEFT OUTER JOIN perfiladm as pfa on pfp.idPerfilAdm=pfa.idPerfilAdm  ");
			if (idPerfilAdmXPessoa != null)
			{
				query.AppendLine(where + "pfp.idPerfilAdmXPessoa=@idPerfilAdmXPessoa ");
				where = "AND ";
			}
			if (idPessoa != null)
			{
				query.AppendLine(where + "pfp.idPessoa=@idPessoa ");
				where = "AND ";
			}
			if (idPerfilAdm != null)
			{
				query.AppendLine(where + "pfp.idPerfilAdm=@idPerfilAdm ");
				where = "AND ";
			}


			query.AppendLine("ORDER BY pfp.idPerfilAdmXPessoa ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			if (idPerfilAdmXPessoa!= null) cmd.Parameters.Add(getParameter(cmd, "@idPerfilAdmXPessoa", idPerfilAdmXPessoa));
			if (idPessoa!= null) cmd.Parameters.Add(getParameter(cmd, "@idPessoa", idPessoa));
			if (idPerfilAdm!= null) cmd.Parameters.Add(getParameter(cmd, "@idPerfilAdm", idPerfilAdm));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<PerfiladmxpessoaVO> listPerfiladmxpessoa = new List<PerfiladmxpessoaVO>();

				while (reader.Read())
				{
					PerfiladmxpessoaVO perfiladmxpessoaVO = PerfiladmxpessoaVO.CreateVO();
					perfiladmxpessoaVO.idPerfilAdmXPessoa = reader.GetInt32(reader.GetOrdinal("pfp_idPerfilAdmXPessoa"));
					perfiladmxpessoaVO.idPessoa = reader.GetInt32(reader.GetOrdinal("pfp_idPessoa"));
					if (!reader.IsDBNull(reader.GetOrdinal("pes_pessoa")))
						perfiladmxpessoaVO.idPessoaVO.pessoa = reader.GetString(reader.GetOrdinal("pes_pessoa"));
					perfiladmxpessoaVO.idPerfilAdm = reader.GetInt32(reader.GetOrdinal("pfp_idPerfilAdm"));
					if (!reader.IsDBNull(reader.GetOrdinal("pfa_perfilAdm")))
						perfiladmxpessoaVO.idPerfilAdmVO.perfilAdm = reader.GetString(reader.GetOrdinal("pfa_perfilAdm"));
					perfiladmxpessoaVO.cadastro = reader.GetDateTime(reader.GetOrdinal("pfp_cadastro"));
					perfiladmxpessoaVO.cadastradoPor = reader.GetString(reader.GetOrdinal("pfp_cadastradoPor"));
					perfiladmxpessoaVO.edicao = reader.GetDateTime(reader.GetOrdinal("pfp_edicao"));
					perfiladmxpessoaVO.editadoPor = reader.GetString(reader.GetOrdinal("pfp_editadoPor"));


					listPerfiladmxpessoa.Add(perfiladmxpessoaVO);
				}
				reader.Close();
				return listPerfiladmxpessoa;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}

		public void setPerfiladmxpessoa(PerfiladmxpessoaVO perfiladmxpessoaVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE perfiladmxpessoa ");
			query.AppendLine("SET idPessoa=@idPessoa, idPerfilAdm=@idPerfilAdm, edicao=@edicao, editadoPor=@editadoPor ");
			query.AppendLine("WHERE idPerfilAdmXPessoa=@idPerfilAdmXPessoa ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idPerfilAdmXPessoa", perfiladmxpessoaVO.idPerfilAdmXPessoa));
			cmd.Parameters.Add(getParameter(cmd, "@idPessoa", perfiladmxpessoaVO.idPessoa));
			cmd.Parameters.Add(getParameter(cmd, "@idPerfilAdm", perfiladmxpessoaVO.idPerfilAdm));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", perfiladmxpessoaVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", perfiladmxpessoaVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}

		public long newPerfiladmxpessoa(PerfiladmxpessoaVO perfiladmxpessoaVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO perfiladmxpessoa ");
			query.AppendLine("  ( idPessoa, idPerfilAdm, cadastro, cadastradoPor, edicao, editadoPor ) ");
			query.AppendLine("VALUES ( @idPessoa, @idPerfilAdm, @cadastro, @cadastradoPor, @edicao, @editadoPor ) ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idPessoa", perfiladmxpessoaVO.idPessoa));
			cmd.Parameters.Add(getParameter(cmd, "@idPerfilAdm", perfiladmxpessoaVO.idPerfilAdm));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", perfiladmxpessoaVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", perfiladmxpessoaVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", perfiladmxpessoaVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", perfiladmxpessoaVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('perfiladmxpessoa') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }

		}

		public void delPerfiladmxpessoa(PerfiladmxpessoaVO perfiladmxpessoaVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM perfiladmxpessoa ");
			query.AppendLine("WHERE idPerfilAdmXPessoa=@idPerfilAdmXPessoa ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idPerfilAdmXPessoa", perfiladmxpessoaVO.idPerfilAdmXPessoa));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}
		public int getCountPerfiladmxpessoaxIdPessoa(int? idPessoa)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT COUNT(idPessoa) as ocorrencias FROM perfiladmxpessoa WHERE IdPessoa=@IdPessoa ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@IdPessoa", idPessoa));

			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();
				reader.Read();

				int ocorrencias = 0;
				ocorrencias = reader.GetInt32(reader.GetOrdinal("ocorrencias"));
				reader.Close();
				return ocorrencias;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}
		public int getCountPerfiladmxpessoaxIdPerfilAdm(int? idPerfilAdm)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT COUNT(idPerfilAdm) as ocorrencias FROM perfiladmxpessoa WHERE IdPerfilAdm=@IdPerfilAdm ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@IdPerfilAdm", idPerfilAdm));

			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();
				reader.Read();

				int ocorrencias = 0;
				ocorrencias = reader.GetInt32(reader.GetOrdinal("ocorrencias"));
				reader.Close();
				return ocorrencias;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}
	}
}
